'''
匹配分组

什么是匹配分组？
匹配分组是正则表达式中的一个概念，它用于将一个正则表达式分成多个部分，
每个部分可以用来匹配不同的字符串。

匹配分组的主要作用如下：
1，分组匹配：正则表达式可以用来匹配一个字符串中的某些部分，
例如从一个字符串中提取出所有的数字。
2，分组替换：正则表达式可以用来替换一个字符串中的某些部分，
例如将一个字符串中的所有数字替换为另一个数字。
3，分组提取：正则表达式可以用来提取一个字符串中的某些部分，
例如从一个字符串中提取出所有的数字。
4，分组分割：正则表达式可以用来分割一个字符串，
例如将一个字符串按照空格分割成多个单词。
5，分组引用：正则表达式可以用来引用前面的分组，
例如(abc)\1表示abc出现2次。
6，分组命名：正则表达式可以用来给分组命名，
例如(?P<name>abc)表示abc出现1次。
7，分组回溯：正则表达式可以用来回溯前面的分组，
例如(abc)(\1)表示abc出现2次。
8，分组嵌套：正则表达式可以用来嵌套分组，
例如((abc)(\1))表示abc出现3次。
9，分组优先级：正则表达式可以用来指定分组的优先级，
例如(abc|def)表示abc或def出现1次。
10，分组回溯引用：正则表达式可以用来回溯前面的分组，
例如(abc)(\1)表示abc出现2次。
11，分组回溯命名：正则表达式可以用来回溯前面的分组，
例如(?P<name>abc)(\1)表示abc出现2次。
12，分组回溯嵌套：正则表达式可以用来回溯前面的分组，
例如((abc)(\1))表示abc出现3次。
13，分组回溯优先级：正则表达式可以用来指定分组的优先级，
例如(abc|def)(\1)表示abc或def出现2次。
14，分组回溯命名优先级：正则表达式可以用来指定分组的优先级，
例如(?P<name>abc|def)(\1)表示abc或def出现2次。
15，分组回溯嵌套优先级：正则表达式可以用来指定分组的优先级，
例如((abc)(\1))|((def)(\2))表示abc或def出现3次。
16，分组回溯嵌套命名优先级：正则表达式可以用来指定分组的优先级，
例如((?P<name>abc)(\1))|((?P<name>def)(\2))表示abc或def出现3次。
17，分组回溯嵌套命名优先级：正则表达式可以用来指定分组的优先级，
例如((?P<name>abc)(\1))|((?P<name>def)(\2))表示abc或def出现3次。
18，分组回溯嵌套命名优先级：正则表达式可以用来指定分组的优先级，
例如((?P<name>abc)(\1))|((?P<name>def)(\2))表示abc或def出现3次。
19，分组回溯嵌套命名优先级：正则表达式可以用来指定分组的优先级，


'''

import re
content = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match(r'^He.*(\d+).*Demo$',content) # 匹配分组，使用()来分组
print(result)
print(result.group()) # 匹配到的字符串
print(result.group(1))
print(result.groups())


result = re.match(r'^(\w+)@(163|126|qq)\.com$','mailfendou@163.com')
print(result.group()) # 匹配到的字符串
print(result.group(1)) # 匹配到的第一个分组
print(result.group(2)) # 匹配到的第二个分组

g1 = result.group(1).upper()
print(g1)